/**
 * @file dogzwindow.h
 *
 * Klasa głównego okna programu - nagłówek.
 *
 * @author Zbigniew Siciarz
 * @date 2009
 * @version 2.0.0
 * @since 2.0.0
 */

#ifndef DOGZWINDOW_H
#define DOGZWINDOW_H

#include "ui_dogzwindow.h"
#include "dogz/Dogz.h"
#include "StarsDialog.h"
#include "VisualObservationDialog.h"
#include "ObservationsListDialog.h"
#include "RssReader.h"
#include <QCloseEvent>
#include <QList>
#include <QMap>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QString>
#include <QtGui/QMainWindow>

/**
 * Główne okno aplikacji.
 */
class DogzWindow : public QMainWindow
{
    Q_OBJECT

public:
    DogzWindow(QWidget *parent = 0);
    ~DogzWindow() {}

public slots:
    void logMessage(const QString& msg);

protected:
    void closeEvent(QCloseEvent* event);

private:
    /**
     * Klasa interfejsu wygenerowana przez Qt Designera.
     */
    Ui::DogzWindowClass ui;

    /**
     * Dostęp do internetu.
     */
    QNetworkAccessManager* networkManager;

    /**
     * Zarządzanie gwiazdami.
     */
    Dogz::StarManager* starManager;

    /**
     * Okienko dodawania nowej obserwacji.
     */
    VisualObservationDialog* visualObsDialog;

    /**
     * Okno podglądu bazy gwiazd.
     */
    StarsDialog* starsDialog;

    /**
     * Okno przeglądania obserwacji.
     */
    ObservationsListDialog* observationsListDialog;

    /**
     * Czytnik RSS.
     */
    RssReader* rss;

    void readSettings();
    void writeSettings();
    void createActions();
    void createMenus();
    void createTools();
    void initNetwork();

private slots:
    void showPreferences();
    void about();
    void test();
    void gcvsLookupFinished(Dogz::Star star);
    void gcvsError(QString message);
    void aavsoLookupFinished(QList<Dogz::Observation*> observations);
    void aavsoError(QString message);
    void rssReadFinished();

    void showAddObservations();
    void showStarsWindow();
    void showObservationsList();

    void importFromOldDogz();

    // sloty zdarzeń zakładki Narzędzia
    void on_editDateFrom_dateTimeChanged(const QDateTime& date);
    void on_btnDateFromNow_clicked();
    void on_editJdFrom_textChanged(const QString& text);
    void on_btnJdFromNow_clicked();

    void on_btnQuickStarSearch_clicked();
};

#endif // DOGZWINDOW_H
